iT邦幫忙

2023 iThome 鐵人賽

DAY 3
0
自我挑戰組

和地鼠做30天好朋友系列 第 3

地鼠,查一下ip 吧

  • 分享至 

  • xImage
  •  

請地鼠幫我查查看我的 ip 吧... 👈 本篇有夠廢

ip 就是外部網路識別你的位置,由一串數字組合 bla bla 的,自己去查啦, 我懶得解釋 XD

package main

import (
	"fmt"
	"io"
	"net/http"
)

func main() {
	url := "http://orange.tw/"

	res, err := http.Get(url)
	content, err := io.ReadAll(res.Body)

	if err != nil {
		fmt.Println("Request is Error")
		fmt.Println(err)
	}

	fmt.Println(string(content))
}

還是解釋一下程式碼好了 👈 想要水一下字數到 300 字以上
主要其實就是這一行

http.Get(url)

所以...你懂得,你也可以寫一個讓地鼠幫你送表單之類的,改成

http.Post(url)

這樣就好...

然後讓我們來看看 Golang 文件怎麼寫...: https://pkg.go.dev/net/http#Get

func Get ¶
func Get(url string) (resp *Response, err error)
Get issues a GET to the specified URL. If the response is one of the following redirect codes, Get follows the redirect, up to a maximum of 10 redirects...

好啦,後面請自己在官網上看,總之就是拿來作送GET 請求的方法...

拿到了response 就是要去讀它,我們用到io 這個 lib,他讀懂後丟到content這個變數,但讓我們再來看一下 golang 的文件:https://pkg.go.dev/io#ReadAll

func ReadAll ¶
func ReadAll(r Reader) ([]byte, error)
ReadAll reads from r until an error or EOF and returns the data it read. A successful call returns err == nil, not err == EOF. Because ReadAll is defined to read from src until EOF, it does not treat an EOF from Read as an error to be reported.

有沒有發現他的回傳是[]byte...
我們肉眼能識別的只有文字, byte 我們可是看不懂的呢...除非...你不是人?!
所以我們才要

string(content)

至於那段

	if err != nil {
		fmt.Println("Request is Error")
		fmt.Println(err)
	}

其實就是一種 Error handing 手段...如果你能百分之兩百確認程式不會有錯誤發生...那你大可以刪掉這一段(❌ 亂教 哈)

這個時候就要討論一下 Golang 的錯誤處理了,我覺得和其他語言不太一樣,如果你有寫過其他語言,大部分語言長以下這個樣子

try {
    ...
} catch {
    ...
}

但地鼠先生比較特別一點,他就是要與眾不同,要和大象、蟒蛇、咖啡分道揚鑣,於是就出現了這種要另外宣告一個 err 變數去接 error, 然後搞一個if去做處理...

之前在 Golang 社群也有討論過這種處理範式,反而認為才是符合「無暇程式碼」...各位看官,你們覺得呢?

好啦,大概這樣的解釋差不多了吧...應該水過三百字以上了吧?!

Golang 要做爬蟲也不會輸給 Python 呢!

就是這麼簡單!


上一篇
和地鼠玩個終極密碼吧
下一篇
地鼠,幫我寫情書給 Alice 吧
系列文
和地鼠做30天好朋友12
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言